package ia.robot.gui;

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.border.EmptyBorder;

/**
 * Clase que representa el panel de mensajes encargado de mostrar informacion
 * sobre eventos y la ejecucion de las estrategias de busqueda.
 * 
 * @author Jaime A. Corrales Gonzalez
 * @author Alejandro Tejera Perez
 */
public class MainLogPane extends JPanel {

	private static final long serialVersionUID = 1L;

	public static final String timeStampString = "Add timestamp";
	public static final String clearLogString = "Clear log";

	private JButton timeStampButton;
	private JButton clearLogButton;

	private JTextArea logTA;

	/**
	 * Constructor por defecto.
	 */
	public MainLogPane() {
		this.setLayout(new BorderLayout(5, 5));
		this.setBorder(new EmptyBorder(0, 5, 5, 5));

		logTA = new JTextArea(10, 0);
		logTA.setEditable(false);
		logTA.setFont(new Font("Monospaced", Font.PLAIN, 12));

		JScrollPane scrollPane = new JScrollPane(logTA);

		timeStampButton = new JButton(timeStampString);
		timeStampButton.setFocusable(false);

		clearLogButton = new JButton(clearLogString);
		clearLogButton.setFocusable(false);

		JPanel logButtonPane = new JPanel(new FlowLayout(FlowLayout.CENTER, 5,
				0));
		logButtonPane.add(timeStampButton);
		logButtonPane.add(clearLogButton);

		this.add(scrollPane, BorderLayout.CENTER);
		this.add(logButtonPane, BorderLayout.SOUTH);
	}

	/**
	 * Metodo que asocia un escuchador de eventos a botones del panel.
	 * 
	 * @param l
	 *            - Escuchador de eventos.
	 */
	public void addButtonListener(ActionListener l) {
		timeStampButton.addActionListener(l);
		clearLogButton.addActionListener(l);
	}

	/**
	 * Elimina el contenido del logger.
	 */
	public void clear() {
		logTA.setText("");
	}

	/**
	 * Escribe un mensaje en el logger.
	 * 
	 * @param s
	 *            - Mensaje a escribir.
	 */
	public synchronized void write(String s) {
		logTA.append(s);
	}

	/**
	 * Metodo para bloquear el panel de mensajes al ejecutar una estrategia de
	 * busqueda.
	 */
	public synchronized void lockLogPane() {
		timeStampButton.setEnabled(false);
		clearLogButton.setEnabled(false);
	}

	/**
	 * Metodo para desbloquear el panel de mensajes al terminar la ejecucion de
	 * una estrategia de busqueda.
	 */
	public synchronized void unlockLogPane() {
		timeStampButton.setEnabled(true);
		clearLogButton.setEnabled(true);
	}
}
